package droidhouseclone;

import java.awt.*;
import java.util.Observable;
import java.util.Observer;
import javax.swing.*;

/**
 *
 * @author Lorenzo Ferri
 */
class FinestraPrincipale extends JFrame implements Observer {

    //Attributi della Classe
    private JMenuBar bar;
    private JMenu menu;
    private JMenuItem close;
    private JPanel pannelloCentrale;

    public FinestraPrincipale(StateObservable subject, PlayStopView playView, InfoView info, VolumeView volumeView) {

        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;

        // centra frame sullo schermo
        setLocation(screenWidth / 3, screenHeight / 3);

        //Imposto il Layout Manager della finestra
        this.setLayout(new BorderLayout());

        // Devo inizializzare tutti gli attributi
        this.bar = new JMenuBar();
        this.menu = new JMenu("Menu");
        this.close = new JMenuItem("Esci");
        this.pannelloCentrale = new JPanel(new FlowLayout(FlowLayout.LEFT));

        //Imposto l'icona del MenuItem
        this.close.setIcon(new ImageIcon("application-exit.png"));
        
        //Setto l'identificativo del commando del MenuItem
        this.close.setActionCommand("Exit");

        //Imposto il listener del MenuItem
        this.close.addActionListener(new ButtonsController(subject));

        // Associo i menuItem ai rispettivi menu
        this.menu.add(this.close);

        //Associo i Menu alla barra.
        this.bar.add(menu);

        // Associo la barra al frame
        this.setJMenuBar(this.bar);

        //Disabilito l'opzione di ridimensionalità del frame
        this.setResizable(false);

        //Setto l'operazione di default alla chiusura della finestra
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Imposto il titolo della finestra
        setTitle("Droid-house-clone-player!!!!");

        //Mi aggiungo come observer
        subject.addObserver(this);
       
        //Setto la dimensione della finestra principale
        this.setSize(455, 130);
      
        //aggiundo elementi al pannello centrale
        this.pannelloCentrale.add(playView);
        this.pannelloCentrale.add(info);

        //aggiungo i pannelli alla finestra
        this.add(this.pannelloCentrale, BorderLayout.CENTER);
        this.add(volumeView, BorderLayout.EAST);


    }

    public void update(Observable o, Object arg) {
        
        //Oggetto osservato
        StateObservable model = (StateObservable) o;
        //Controllo lo stato attuale del subject
        switch (model.getState()) {

            case StateObservable.ERRORMESSAGE:
                //Visualizzo il messaggio di errore
                JOptionPane.showMessageDialog(this,
                        "Un altro programma sta usando risorse necessarie per l'esecuzione!!"
                        + "\nDroid House Clone verrà chiuso!",
                        "Message error",
                        JOptionPane.ERROR_MESSAGE);
                System.exit(0);
                break;
            default:
                break;

        }
    }
}
